Typically, in storage technologies, read-ahead algorithms are employed by storage controllers to read file data and store in a cache which has a higher probability of being read by an application. For example, reading a next set of physical blocks in a sequential file read operation. Typically, these read-ahead algorithms have limited interaction with the applications and file systems which include details of how a logical unit of files is spread across a storage device. Further, the storage controllers using the read-ahead algorithms may not be capable of detecting and reading metadata associated with needed read-ahead physical blocks for caching.
Therefore, the existing read-ahead algorithms may be only effective where large amounts of file data are contiguously stored within a storage device. However, in a typical read scenario, an application may have to read blocks of file data that are stored non-contiguously within the storage device. In such a scenario, using the existing read-ahead algorithms can result in significant cache misses and data delivery latencies as the next block of file data may not be stored in next storage area of the storage device.
The drawings described herein are for illustration purposes only and are not intended to limit the scope of the present disclosure in any way.